# -*- coding: UTF-8 -*-
# __author__ = '10459'

from sqlalchemy import Column, Integer, String, Boolean, Float,ForeignKey, desc,func
from sqlalchemy.orm import relationship
from app.models.base import Base,db
from app.spider.yushu_book import YuShuBook


class Wish(Base):
    id = Column(Integer, primary_key=True)
    launched = Column(Boolean,default=False)  # False表示没有送出去，True表示送出去了
    user = relationship("User")
    uid = Column(Integer,ForeignKey("user.id")) #用户唯一标识，记录不同用户
    # book = relationship("Book")   本项目是通过url访问来获取书的，所以这两个要注释
    # bid = Column(Integer,ForeignKey("book.id")) #图书的唯一标识，记录不同图书
    isbn = Column(String(15), nullable=False)


    @classmethod
    def get_user_wishes(cls,uid):
        wishes=Wish.query.filter_by(uid=uid,launched=False).order_by(
            desc(Wish.create_time)).all()
        return wishes
    @classmethod
    def get_gift_counts(cls,isbn_list):
        from app.models.gift import Gift #防止循环导入，所以这里导入
        #根据传入的一组isbn，需在wish表中计算每个礼物的wish数量
        #db.session可以查询，删除，创建表
        #filter需要接受条件表达式，与filter_by（关键字参数）不同
        #每一本书对应的数量，书是组，数量也是组，所以要group_by
        #isbn  wish的数量，而不是查出wish的所有东西,所以查询的条件是func.count(Wish.id),query里就是sql里面查询的结果显示哪些字段
        #in查询，需要查出每个isbn对应wish的数量Wish.isbn.in_(列表),status==1表示没有被删除，filter_by没写，是因为做了前面做了改写把status写上去了
        #函数中不要返回元组而应返回字典
        count_list=db.session.query(func.count(Gift.id),Gift.isbn).filter(
            Gift.launched == False,
            Gift.isbn.in_(isbn_list),
            Gift.status==1).group_by(Gift.isbn).all()
        #把数据返回成字典
        count_list=[{"count":w[0],"isbn":w[1]} for w in count_list]
        return count_list
   #获取单本书
    @property
    def book(self):
        yushu_book = YuShuBook()
        yushu_book.search_by_isbn(self.isbn)
        return yushu_book.first